package edu.colorado.geometry;

public class Location implements Cloneable
{
  private double x;
  private double y;
  
  public Location (double xInitial, double yInitial)
  {
    x = xInitial;
    y = yInitial;
  }
  
  public Object clone ()
  {
    Location answer;
    
    try
    {
      answer = (Location)super.clone ();
    }
    catch( CloneNotSupportedException e)
    {
      throw new RuntimeException ("class not cloneable");
    }
    
    return answer;
  }	
  
  public static double distance (Location p1, Location p2)
  {
    double a, b, c_squared;
    
    // prevent null reference
    if( (p1 == null) || (p2 == null) )
      return Double.NaN;

    // calculate distance
    a = p1.x - p2.x;
    b = p1.y - p2.y;
    c_squared = a * a + b * b;

    return Math.sqrt (c_squared);
  }
  
  public boolean equals (Object obj)
  {
    if( obj instanceof Location )
    {
      Location candidate = (Location)obj;
      return (candidate.x == x) && (candidate.y == y);
    }
    else
      return false;
  }
  
  public double getX () { return x; }
  
  public double getY () { return y; }
  
  public static Location midpoint (Location p1, Location p2)
  {
    double xMid, yMid;
    
    if ( (p1 == null) || (p2 == null) )
      return null;
      
    xMid = (p1.x + p2.x) / 2;
    yMid = (p1.y + p2.y) / 2;
    
    Location answer = new Location (xMid, yMid);
    return answer;
  }
  
  public void rotate90 ()
  {
    double xNew = y;
    double yNew = -x;
    x = xNew;
    y = yNew;
  }
  
  public void shift (double xAmount, double yAmount)
  {
    x += xAmount;
    y += yAmount;
  }
  
  public String toString ()
  {
    return "(x=" + x + " y=" + y + ")"
  }
}

// Teme

// Laborator
//
// 1. Corectati greseala pentru ca fisierul sa se poata compila cu succes.
// a) Plasati fisierul Location.java in ierarhia de directoare necesara.
//    Creati mai apoi un fisier LocationDemo.java in care sa folositi clasa
//    Location (creati un punct si afisati-i coordonatele).
// b) Realizati un triunghi din trei puncte. Afisati punctele. Mai apoi
//    tipariti marimea fiecareia din cele trei laturi.
// c) Creati o copie a unuia din puncte. Verificati pe acest punct metodele
//    speciale equals() si ==. Ce observati ?
// d) Petru doua puncte, A si B, calculati punctul din mijloc, C. Comparati
//    apoi distanta de la A la C cu cea de la C la B. Ce observati ?
// e) Pentru punctele create, folositi metodele shift si rotate90
// f) Pentru tema de la laboratorul 3 (cea cu triunghiul) implementati in clasa
//    realizata de dvs., ca tema metoda clone (atat pentru clasa ce retine
//    coordonatele triunghiului, cat si pentru clasa ce retine triunghiul
//
// Casa
//  Temele de casa sunt in fisierul Words
//
// Continuati cu fisierul Words.java

